"""
参数名

含义

规则说明

是否必填

缺省值

key

请求服务权限标识

用户在高德地图官网申请Web服务API类型KEY

必填

无

level

道路等级

指定道路等级，下面各值代表的含义：

1：高速（京藏高速）

2：城市快速路、国道(西三环、103国道)

3：高速辅路（G6辅路）

4：主要道路（长安街、三环辅路路）

5：一般道路（彩和坊路）

6：无名道路



可选

5

extensions

返回结果控制

可选值：base,all

可选

base

sig

数字签名

数字签名认证用户必填

可选

无

output

返回数据格式类型

可选值：JSON,XML

可选

JSON

callback

回调函数

callback值是用户定义的函数名称，此参数只在output=JSON时有效

可选

无

rectangle

代表此为矩形区域查询

左下右上顶点坐标对。矩形对角线不能超过10公里

两个坐标对之间用”;”间隔

xy之间用”,”间隔

最后格式为

必填

无
"""
import os.path

import requests
import json

from requests import Response


class AMAPDataCollector:
    def __init__(self,
                 key_dir:str=os.path.join("", os.path.join("conf", 'api.txt')),
                 location:tuple[float,float]=None,
                 key=None,
                 #default: an example location in beijing
                 #first is longitude, second is latitude
                 url:str='https://restapi.amap.com/v3/traffic/status/rectangle?parameters',
                 ):
        self.key = key
        if self.key is None:
            with open(key_dir, 'r') as f:
                self.key = f.read()
        self.url = url
        self.location:tuple[float,float] = location
        if location is None:
            self.location = (116.351147,39.966309)
        self.params = {
            'key': self.key,
            'rectangle': f"{location[0]-0.003},{location[1]-0.003};"
                        +f"{location[0]+0.003},{location[1]+0.003}",
             'output': 'json',
            'level': 5,
            'extensions': 'base'
        }
        print("""requests:""")
        print(self.params)

    def get_data(self)->Response:
        return requests.get(self.url, params=self.params)

# 测试用例
if __name__ == '__main__':
    adc = AMAPDataCollector(
        location=(121.471873,31.226011)
        )
    data = adc.get_data().json()
    with open('data.json', 'w') as fp:
        json.dump(data, fp,ensure_ascii=False)
    print(json.dumps(data, indent=4, ensure_ascii=False))


